Rapid generation of three-dimensional images is becoming increasingly important to many computer applications. For instance, games and entertainment software use three-dimensional graphics to increase the realism of the images displayed to the user. Businesses use three-dimensional graphics to increase the effectiveness of business presentations and data analysis. In addition, medical devices can advantageously utilize three-dimensional images to improve medical diagnosis and treatment.
Many devices that generate three-dimensional images utilize a queued architecture in which commands (e.g., instructions) to be executed are put into a queue. A command parser reads the queue (e.g., fetches commands from the queue), processes the commands, and passes the commands on to a rendering engine. The rendering engine renders the images and passes the output to a display such as a monitor or other display mechanism.
In some devices, multiple queues are used to store commands and feed commands to a shared command parser. The queues can each be fed commands by a different data stream/thread, and often, each queue is assigned a priority level in order to insure that more important commands are processed before less important commands. In addition, each queue can be associated with one of several displays connected to the shared rendering engine, which will render images for each display.
In such devices, certain commands must be processed before other commands that are dependent on the results of the earlier commands. For instance, some devices have a binner to condition the processed commands output from the command parser. One example of conditioning would be the binner computing the vertices of a polygon and feeding the vertices to the rendering engine for rendering. Thus, the binner must complete computation of the vertices before the rendering engine can proceed.
Currently, when such a dependency is necessary to properly render an image, a device will process commands in a serial nature to insure that the proper order is followed. However, serial processing is inefficient and limits the display capabilities of devices that have multiple queues feeding commands to one or more rendering engines.